package com.gqh.weather.controller;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import com.gqh.weather.domain.dto.MyPage;
import com.gqh.weather.domain.dto.PageRequest;
import com.gqh.weather.domain.dto.TaskCreateRequest;
import com.gqh.weather.domain.entity.Task;
import com.gqh.weather.exception.Result;
import com.gqh.weather.service.TaskService;

import jakarta.validation.Valid;
import jakarta.validation.constraints.NotNull;
import lombok.extern.slf4j.Slf4j;

/**
 * 任务管理控制器
 */
@Slf4j
@RestController
@RequestMapping("/pingjia/zh/v1/task")
@Validated
public class TaskController {

    @Autowired
    private TaskService taskService;

    /**
     * 创建评价任务
     *
     * @param request   创建请求
     * @return 创建结果
     */
    @PostMapping("/create")
    public Result<Void> createTask(@Valid TaskCreateRequest request) {
        log.info("创建任务，名称: {}", request.getName());
        // 全部统测
        request.setType(1);
        return taskService.createTask(request);
    }

    /**
     * 更新任务信息
     *
     * @param task 任务对象
     * @return 更新结果
     */
    @PostMapping("/update")
    public Result<Void> updateTask(@Valid TaskCreateRequest task) {
        log.info("更新任务，ID: {}", task.getId());
        return taskService.updateTask(task);
    }

    /**
     * 删除任务
     *
     * @param id 任务ID
     * @return 删除结果
     */
    @PostMapping("/delete")
    public Result<Void> deleteTask(@RequestParam @NotNull List<Integer> id) {
        log.info("删除任务，ID: {}", id);
        return taskService.deleteTask(id);
    }

    /**
     * 任务列表查询
     *
     * @param pageRequest 分页参数
     * @param createdBy   创建者ID（权限过滤）
     * @return 查询结果
     */
    @GetMapping("/list")
    public Result<MyPage<Task>> getTaskList(@Valid PageRequest<Task> pageRequest,
            @RequestParam(required = false) Integer createdBy) {
        log.info("查询任务列表，页码: {}, 数量: {}, 关键字: {}, 创建者: {}", 
                pageRequest.getPage(), pageRequest.getCount(), pageRequest.getKeyword(), createdBy);
        return taskService.getTaskList(pageRequest, createdBy);
    }

    /**
     * 任务详情查询
     *
     * @param id 任务ID
     * @return 任务详情
     */
    @GetMapping("/info")
    public Result<Task> getTaskInfo(@RequestParam @NotNull Integer id) {
        log.info("获取任务详情，ID: {}", id);
        return taskService.getTaskInfo(id);
    }

    /**
     * 修改任务状态
     *
     * @param id    任务ID
     * @param state 状态：0未发布 1已发布 2结束
     * @return 修改结果
     */
    @PostMapping("/state")
    public Result<Void> updateTaskState(@RequestParam @NotNull Integer id,
            @RequestParam @NotNull Integer state) {
        log.info("修改任务状态，ID: {}, 状态: {}", id, state);
        return taskService.updateTaskState(id, state);
    }

}